package com.wayne.security.config;

import com.wayne.security.handler.MyAuthenticationSuccessHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 开启权限配置
        http.authorizeRequests()
                // 所有的请求都要认证之后 才能访问
                .anyRequest().authenticated()
                .and()
                // 开启表单登录配置
                .formLogin()
                // 登录页面地址
                .loginPage("/login.html")
                // 登录接口地址
                .loginProcessingUrl("/doLogin")
                // 登录成功后的跳转地址 (302 客户端重定向，由其他页面拦截登录后会跳回拦截的页面[可以配置alwaysUse:true 强制跳转])
                .defaultSuccessUrl("/index", false)
                // 登录成功后的跳转地址 (服务端重定向  强制重定向至配置的页面)
                // .successForwardUrl("/index")
                //.successHandler(successHandler())
                .successHandler(new MyAuthenticationSuccessHandler())
                // 登录失败后的跳转地址
                .failureUrl("/login.html")
                // 登录用户名的参数名称
                .usernameParameter("uname")
                // 登录密码的参数名称
                .passwordParameter("passwd")
                // 登录相关的页面和接口不做拦截
                .permitAll()
                .and()
                // 禁用 CSRF 防御功能
                .csrf().disable();
    }

    SavedRequestAwareAuthenticationSuccessHandler successHandler() {
        SavedRequestAwareAuthenticationSuccessHandler handler =
                new SavedRequestAwareAuthenticationSuccessHandler();
        handler.setDefaultTargetUrl("/index");
        handler.setTargetUrlParameter("target");
        return handler;
    }
}
